package ar.com.muebleria.view.ventanasInternas;

import java.awt.Dimension;
import java.awt.Font;
import java.awt.Rectangle;
import java.util.Date;

import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;

import org.apache.log4j.Logger;

import ar.com.muebleria.beans.Familia;
import ar.com.muebleria.beans.Producto;
import ar.com.muebleria.beans.SubFamilia;
import ar.com.muebleria.model.dao.DAOProducto;
import ar.com.muebleria.util.Herramientas;
import ar.com.muebleria.util.Validador;

public class VistaSalida extends JInternalFrame {

	private static final long serialVersionUID = 2419668647379665261L;
	private static VistaSalida myInstance;
	private JLabel txt1 = null;
	private JTextField nombre = null;
	private DefaultTableModel modelo;
	private JScrollPane jScrollPane = null;
	private JTable jTable = null;
	private JLabel vali1 = null;
	private JPanel jContentPane = null;  //  @jve:decl-index=0:visual-constraint="10,263"

	private VistaSalida() {
		super();
	}

	/**
	 * This method initializes this
	 * 
	 * @return void
	 */
	private void initialize() {
		this.pack();
		modelo = new DefaultTableModel();
		modelo.addColumn("Codigo");
		modelo.addColumn("Descripcion");
		modelo.addColumn("Hora");	
		this.setTitle("Ingrese un nuevo cliente:");
		this.setSize(new Dimension(661, 400));
		this.setFont(new Font("Comic Sans MS", Font.PLAIN, 12));
		this.setClosable(true);
		this.setResizable(false);
		this.setContentPane(getJContentPane());
		this.setDefaultCloseOperation(JInternalFrame.HIDE_ON_CLOSE);
		this.setVisible(true);
		this.addInternalFrameListener(new javax.swing.event.InternalFrameAdapter() {
			public void internalFrameClosing(javax.swing.event.InternalFrameEvent e) {
				myInstance = null;
			}
		});
			
			
		setVisible(true);
	}

	/**
	 * This method initializes jContentPane
	 * 
	 * @return javax.swing.JPanel
	 */
	private JPanel getJContentPane() {
		if (jContentPane == null) {
			vali1 = new JLabel();
			vali1.setBounds(new Rectangle(275, 13, 15, 25));
			vali1.setText(" *");
			vali1.setFont(new Font("Times-Roman", Font.BOLD, 17));
			vali1.setVisible(false);
			txt1 = new JLabel();
			txt1.setBounds(new Rectangle(13, 13, 82, 25));
			txt1.setText(" Nombre:");
			txt1.setFont(new Font("Times-Roman", Font.BOLD, 17));
			jContentPane = new JPanel();
			jContentPane.setLayout(null);
			jContentPane.setSize(new Dimension(645, 368));
			jContentPane.add(txt1, null);
			jContentPane.add(getNombre(), null);
			jContentPane.add(getJScrollPane(), null);
			jContentPane.add(vali1, null);
		
		}
		return jContentPane;
	}
	public static VistaSalida getInstance(){
		if(myInstance == null){
			myInstance = new VistaSalida();
			myInstance.initialize();
			return myInstance;
		}
		return null;
	}

	/**
	 * This method initializes nombre	
	 * 	
	 * @return javax.swing.JTextField	
	 */
	private JTextField getNombre() {
		if (nombre == null) {
			nombre = new JTextField();
			nombre.setBounds(new Rectangle(106, 13, 166, 25));
			nombre.setFont(new Font("Times-Roman", Font.BOLD, 17));
			nombre.addFocusListener(new java.awt.event.FocusAdapter() {
				public void focusGained(java.awt.event.FocusEvent e) {
				}
			});
			nombre.addMouseListener(new java.awt.event.MouseAdapter() {
				public void mouseEntered(java.awt.event.MouseEvent e) {
				}
			});
			nombre.addKeyListener(new java.awt.event.KeyListener() {
				public void keyPressed(java.awt.event.KeyEvent e) {
					if(10 == e.getKeyCode())
						ingresar();
				}
				public void keyTyped(java.awt.event.KeyEvent e) {
				}
				public void keyReleased(java.awt.event.KeyEvent e) {
				}
			});
		}
		return nombre;
	}

	/**
	 * This method initializes jScrollPane	
	 * 	
	 * @return javax.swing.JScrollPane	
	 */
	private JScrollPane getJScrollPane() {
		if (jScrollPane == null) {
			jScrollPane = new JScrollPane();
			jScrollPane.setBounds(new Rectangle(14, 50, 618, 300));
			jScrollPane.setViewportView(getJTable());
		}
		return jScrollPane;
	}

	/**
	 * This method initializes jTable	
	 * 	
	 * @return javax.swing.JTable	
	 */
	private JTable getJTable() {
		if (jTable == null) {
			jTable = new JTable(modelo);
			jTable.setFont(new Font("Times-Roman", Font.BOLD, 17));
			jTable.addMouseListener(new java.awt.event.MouseAdapter() {
				public void mouseClicked(java.awt.event.MouseEvent e) {
					nombre.setText((modelo.getValueAt(jTable.getSelectedRow(),0)).toString());
				}
			});
		}
		return jTable;
	}
	
	private void ingresar(){
		Logger.getLogger("VistaSalida").info("Iniciando la validacion de los datos.");
		Validador vali = new Validador();
			
		String codigo = nombre.getText();
		
		if(!vali.validarCodigoProducto(codigo)){
			Logger.getLogger("VistaSalida").info("Error en el codigo.");
			nombre.setText("");
			return;
		}
		
		Logger.getLogger("VistaSalida").info("Obteiendo el familia.");
		String codigoFamilia = (String) codigo.substring(0,codigo.indexOf(".")).trim();
		Logger.getLogger("VistaSalida").info("Familia: " + codigoFamilia);	

		Logger.getLogger("VistaSalida").info("Obteiendo el producto.");
		String codigoProducto = (String) codigo.substring(codigo.indexOf(".")+1).trim();
		codigoProducto = (String) codigoProducto.substring(0,codigo.indexOf(".")).trim();
		Logger.getLogger("VistaSalida").info("Producto: " + codigoProducto);	
			
		Logger.getLogger("VistaSalida").info("Obteiendo el id de producto.");
		String idProducto = (String) codigo.substring(codigo.indexOf(".")+1).trim();
		idProducto = (String) idProducto.substring(codigo.indexOf(".")+1).trim();
		Logger.getLogger("VistaSalida").info("Id de producto: " + idProducto);
		
		DAOProducto daoProducto = new DAOProducto();
		
		String descripcion = daoProducto.obtenerDescripcionProducto(codigoFamilia,codigoProducto);
		
		if(!vali.validarDescripcion(descripcion)){
			Logger.getLogger("VistaSalida").info("Error en el codigo.");
			nombre.setText("");
			return;
		}
		Familia familia = new Familia();
		familia.setFamliaId(codigoFamilia);
		SubFamilia subFamilia = new SubFamilia();
		subFamilia.setFamilia(familia);
		subFamilia.setSubFamiliaId(codigoProducto);
		Producto producto = new Producto();
		producto.setSubFamilia(subFamilia);
		producto.setProductoId(idProducto);
		producto.setDescripcion(descripcion);
		
		int resultado = daoProducto.descargarProducto(producto);
		
		if(resultado == 0){
			Logger.getLogger("VistaSalida").info("El producto no se encuentra en stock.");
			nombre.setText("");
			return;
		}
			
		///////////////////////////////////////
		Object [] fila = new Object[3];
		fila[0]=producto.codigoCompleto();
		fila[1]=producto.getDescripcion();
		fila[2]=Herramientas.toString(new Date(),"HH:mm:ss");
		modelo.addRow( fila );
		
		nombre.setText("");
		
		
	}
}
